SUBROUTINE ReadMetadataFileUnit &
!
(fileunit, network)
IMPLICIT NONE
! Arguments with intent (in):
INTEGER (KIND = short), INTENT(IN) :: fileunit
! Arguments with intent(out):
TYPE (ObservationalNetwork), INTENT(OUT) :: network
!local declarations:
INTEGER (KIND = short) :: err_io
INTEGER (KIND = short) :: i
CHARACTER (LEN = 300) :: string
TYPE (IniList) :: ini
CHARACTER (LEN = 1000) :: filename
!----------------------------end of declarations-------------------------------
!store path
INQUIRE (UNIT = fileunit, NAME = network % path)
!open and read name value pairs name = value
CALL IniOpen (fileunit, ini)
!check and store network info
!description
IF (KeyIsPresent ('description', ini) ) THEN
network % description = IniReadString ('description', ini)
ELSE !description is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'description missing in file: ', &
argument = TRIM(filename) )
END IF
!unit
IF (KeyIsPresent ('unit', ini) ) THEN
network % unit = IniReadString ('unit', ini)
ELSE !unit is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'unit missing in file: ', &
argument = TRIM(filename) )
END IF
!epsg
IF (KeyIsPresent ('epsg', ini) ) THEN
network % epsg = IniReadInt ('epsg', ini)
ELSE !epsg is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'epsg missing in file: ', &
argument = TRIM(filename) )
END IF
!assign coordinate reference system from EPSG code
network % mapping = DecodeEPSG (network % epsg)
!number of stations
IF (KeyIsPresent ('count', ini) ) THEN
network % countObs = IniReadInt ('count', ini)
ELSE !count is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'count missing in file: ', &
argument = TRIM(filename) )
END IF
!dt
IF (KeyIsPresent ('dt', ini) ) THEN
network % timeIncrement = IniReadInt ('dt', ini)
ELSE !dt is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'dt missing in file: ', &
argument = TRIM(filename) )
END IF
!missing-data flag
IF (KeyIsPresent ('missing-data', ini) ) THEN
network % nodata = IniReadReal ('missing-data', ini)
ELSE !missing-data is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'missing-data missing in file: ', &
argument = TRIM(filename) )
END IF
!height offset
IF (KeyIsPresent ('offsetz', ini) ) THEN
network % offsetZ = IniReadReal ('offsetz', ini)
ELSE !offsetz is missing
INQUIRE (fileunit, NAME = filename)
CALL Catch ('error', 'ObservationalNetworks', &
'offsetz missing in file: ', &
argument = TRIM(filename) )
END IF
!destroy ini
CALL IniClose (ini)
!return to the beginning of file
REWIND (fileunit)
!scan for searching keyword "metadata"
string = ''
DO WHILE ( .NOT. (string(1:8) == 'metadata'))
!DO WHILE ( .NOT. (string(1:10) == 'anagrafica'))
READ(fileunit,'(a)', iostat = err_io) string
IF (err_io /= 0) THEN
CALL Catch ('error', 'ObservationalNetworks', &
'keyword metadata not found' )
END IF
string = StringCompact (string)
string = StringToLower (string)
END DO
ALLOCATE (network % obs (network % countObs))
DO i = 1, network % countObs
READ(fileunit,*) network % obs (i) % name, &
network % obs (i) % id, &
network % obs (i) % xyz % easting, &
network % obs (i) % xyz % northing, &
network % obs (i) % xyz % elevation
!initialize observation values to nodata
network % obs (i) % value = network % nodata
END DO
RETURN
END SUBROUTINE ReadMetadataFileUnit